<?php
App::uses('AppController', 'Controller');

/**
 * Pedidos Controller
 *
 * @property Pedido $Pedido
 * @property PedidosProduto $PedidosProduto
 * 
 */
class PedidosController extends AppController {
	public $components = array( 'RequestHandler' );
	public $helpers = array('Js');
	
	function beforeFilter(){
		$this->loadModel('Produto');
		$this->loadModel('PedidosProduto');
	}
/**
 * index method
 *
 * @return void
 */
	public function index() {
		#filter results exemplo cliente
		$this->Filter->addFilters(
			array(
				'filter1' => array(
					'Cliente.nome' => array(
						'operator' => 'LIKE',
							'value' => array(
								'before' => '%', // opcional
								'after'  => '%'  // opcional
							)
						)
					),
				'filter2' => array(
						'Pedido.status' => array(
								'select' => $this->Filter->select('Status...' , array('Cancelado', 'Ativo'))
						)
				),
				'filter3' => array(
						'Pedido.status_pagamento' => array(
								'select' => $this->Filter->select('Pagamento...' , array('Não pagou', 'Já pagou'))
						)
				)
			)
		);
		
		//$this->Filter->setPaginate('order', 'Cliente.nome ASC'); // opcional
		$this->Filter->setPaginate('limit', 10);              // opcional
		
		// Define conditions
		$this->Filter->setPaginate('conditions', $this->Filter->getConditions()); 
		#paginacao com ajax
		/* $config['limit'] = 10;
		if( !$this->request->is( 'ajax' ) ){
			$this->request->params['named']['page'] = 1;
		}
		
		if(isset( $this->request->query['procurar'] ) ){
			#se foi enviado um get procurar e este nao for nulo, adiciona uma cláusula a consula com o nome a ser pesquisado
			$config['conditions']['and']['Cliente.nome like'] = "%{$this->request->query['procurar']}%";
		}
		
		$this->paginate = $config; 
		//$this->set('pedidos', $this->paginate('Pedido') ); */
		
		$this->Pedido->recursive = 0;
		$this->set('pedidos', $this->paginate());
	}

/**
 * view method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function view($id = null) {
		if (!$this->Pedido->exists($id)) {
			throw new NotFoundException(__('Código do pedido inválido.'));
		}
		$options = array('conditions' => array('Pedido.' . $this->Pedido->primaryKey => $id));
		$this->set('pedido', $this->Pedido->find('first', $options));
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		# arrumar pois não está salvando as relações.
		if ($this->request->is('post')) {
			$this->Pedido->create();
			$this->PedidosProduto->create();
			
			$this->request->data['Pedido']['status_entrega'] = 0; # zero para não entregue e 1 para entregue
			$this->request->data['Pedido']['status_pagamento'] = 0; # zero para não pago e 1 para pago
			$this->request->data['Pedido']['data_hora'] = date('Y-m-d H:i:s');
			
			$this->PedidosProduto->data = $this->request->data['PedidosProduto'];
			//debug($this->request->data);
			for($i = 0; $i < count($this->request->data['PedidosProduto']); $i++){
				$prod =  $this->Produto->find('first', array('fields'=> 'preco_venda', 'conditions' => array('Produto.id' => $this->request->data['PedidosProduto'][$i]['produto_id'])));
				$this->request->data['Pedido']['valor_total'] += $prod['Produto']['preco_venda'] * $this->request->data['PedidosProduto'][$i]['qtde'];
				
			}
			
			if ($this->Pedido->save($this->request->data)) {
				$this->Session->setFlash(__('O pedido foi salvo com sucesso.'), 'default', array('class' => 'alert alert-success'));
				
				$id = $this->Pedido->getLastInsertID();
				if(isset($this->request->data['PedidosProduto'])){
					foreach ($this->request->data['PedidosProduto'] as $produto ){
						$produto['pedido_id'] = $id;
						
						$this->Pedido->PedidosProduto->create();
						$this->Pedido->PedidosProduto->save($produto);
					}
					return $this->redirect(array('action' => 'index'));
				}
				
			} else {
				$this->Session->setFlash(__('O pedido não pode ser salvo. Por favor, tente novamente.'), 'default', array('class' => 'alert alert-danger'));
			}
		}
		$clientes = $this->Pedido->Cliente->find('list');
		
		#filto
		//$produtos = $this->Pedido->Produto->find('list');
		//$this->set( 'produtos', $produtos );
		$produtos = $this->Produto->find('list', array('fields' => 'Produto.id, Produto.nome'));
		$this->set(compact('clientes', 'produtos'));
	}

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		if (!$this->Pedido->exists($id)) {
			throw new NotFoundException(__('Código do pedido inválido.'));
		}
		//debug($this->request->data);
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Pedido->saveAssociated($this->request->data)) {
				$this->Session->setFlash(__('O pedido foi editado com sucesso.'), 'default', array('class' => 'alert alert-success'));
				return $this->redirect(array('action' => 'index'));
			} else {
				$this->Session->setFlash(__('O pedido não pode ser editado. Por favor, tente novamente.'), 'default', array('class' => 'alert alert-danger'));
			}
		} else {
			$options = array('conditions' => array('Pedido.' . $this->Pedido->primaryKey => $id));
			$this->request->data = $this->Pedido->find('first', $options);
		}
		$clientes = $this->Pedido->Cliente->find('list');
		$produtos = $this->PedidosProduto->query('SELECT pedidos_produtos.qtde, pedidos_produtos.descricao, Produtos.nome FROM Produtos, Pedidos_Produtos WHERE Pedidos_Produtos.pedido_id = '.$id.' AND Pedidos_Produtos.produto_id = Produtos.id');
		//$produtos = $this->PedidosProduto->find('list', array('fields' => 'PedidosProduto.produto_id', 'conditions' => array('PedidosProduto.pedido_id' => $id)));
		//debug($produtos);
		$this->set(compact('clientes', 'produtos'));
	}

/**
 * cancelar method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
public function cancelar($id = null) {
	if (!$this->Pedido->exists($id)) {
		throw new NotFoundException(__('Código do pedido inválido.'));
	}
	//debug($this->request->data);
	if ($this->request->is('post') || $this->request->is('put')) {
		$this->Pedido->data['Pedido']['status'] = 0;
		$this->Pedido->data['Pedido']['id'] = $id;
		if ($this->Pedido->save($this->Pedido->data)) {
			$this->Session->setFlash(__('O pedido foi cancelado com sucesso.'), 'default', array('class' => 'alert alert-success'));
			return $this->redirect(array('action' => 'index'));
		} else {
			$this->Session->setFlash(__('O pedido não pode ser cancelado ou houve erro na operação. Por favor, tente novamente.'), 'default', array('class' => 'alert alert-danger'));
		}
	} 
}
/**
 * delete method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		$this->Pedido->id = $id;
		if (!$this->Pedido->exists()) {
			throw new NotFoundException(__('Código do pedido inválido.'));
		}
		$this->request->onlyAllow('post', 'delete');
		if ($this->Pedido->delete()) {
			$this->Session->setFlash(__('O pedido foi deletado com sucesso.'), 'default', array('class' => 'alert alert-success'));
		} else {
			$this->Session->setFlash(__('O pedido não pode ser deletado. Por favor, tente novamente.'), 'default', array('class' => 'alert alert-danger'));
		}
		return $this->redirect(array('action' => 'index'));
	}

}